﻿Public Class Wfrm_confirmar_Mapeo
    Inherits System.Web.UI.Page
    Dim DSProceso As New DataSet
    Dim Exec2 As DotNetDal.SQLPersistence

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then

            Try

                ViewState("archivo") = Session("archivo")
                ViewState("sociedad") = Session("sociedad")
                Dim exec As New DotNetDal.SQLPersistence(False, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
                Dim rp As New DotNetResponse.SQLPersistence
                rp.StoredProcedure = "SP_GOP_GET_UP_CAMPO_CONFIRMAR"
                rp.AddParametro(ViewState("sociedad"))
                exec.ExecuteDataTable(rp)
                DataGrid1.DataSource = rp.DtTable
                DataGrid1.DataBind()

                If Not rp.TieneDatos Then
                    Label1.Visible = True
                End If

                exec.Commit()

            Catch ex As Exception

            End Try

        End If
    End Sub

    Protected Sub Btn_Agregar_Pregunta_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Btn_Agregar_Pregunta.Click
        If Session("sociedad") Is Nothing Then
            Response.Redirect("WFrm_Upload_Excel.aspx")
        End If

        Exec2 = New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)

        Dim Execins As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
        Dim rpins As New DotNetResponse.SQLPersistence
        rpins.StoredProcedure = "SP_UP_INICIA_PROCESO"
        rpins.AddParametro(ViewState("archivo"))
        rpins.AddParametro(ViewState("sociedad"))
        Execins.ExecuteDataTable(rpins)
        Execins.Commit()

        ViewState("unidad_fisica") = rpins.DtTable.Rows(0).Item("ufisica")
        ViewState("id_org") = rpins.DtTable.Rows(0).Item("idorg")
        ViewState("escolaridad") = rpins.DtTable.Rows(0).Item("escolaridad")
        ViewState("nivel_ocupacional") = rpins.DtTable.Rows(0).Item("nivel_ocupacional")
        ViewState("region") = rpins.DtTable.Rows(0).Item("region")
        ViewState("comuna") = rpins.DtTable.Rows(0).Item("comuna")
        ViewState("id_neg") = rpins.DtTable.Rows(0).Item("id_neg")
        ViewState("id_carga") = Session.SessionID
        ViewState("rol_sociedad") = rpins.DtTable.Rows(0).Item("rol_sociedad")
        ViewState("id_cargo") = rpins.DtTable.Rows(0).Item("cargo")
        ViewState("jefatura") = rpins.DtTable.Rows(0).Item("id_persona")

        Dim Exec As New DotNetDal.SQLPersistence(False, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
        Dim rp As New DotNetResponse.SQLPersistence
        rp.StoredProcedure = "SP_GOP_GET_UP_CAMPO_CONFIRMADO"
        rp.AddParametro(ViewState("sociedad"))
        Exec.ExecuteDataTable(rp)
        Exec.Commit()


        If rp.DtTable.Select("TABLA='CONTRATOS CONTRATANTE'").Length > 0 Then
            'ENCONTRÓ CON DATOS DE MAPEO
            Dim Exec1 As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Carga_Sociedades(Exec1, DirectCast(rp.DtTable.Select("TABLA='CONTRATOS CONTRATANTE'"), DataRow())(0).ItemArray(1))
            Exec1.Commit()

        End If
        If rp.DtTable.Select("TABLA='POSICION NEGOCIO'").Length > 0 Then
            'ENCONTRÓ CON DATOS DE MAPEO
            Dim Exec1 As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Carga_Unid_Neg(Exec1, DirectCast(rp.DtTable.Select("TABLA='POSICION NEGOCIO'"), DataRow())(0).ItemArray(1))
            Exec1.Commit()
        End If

        If rp.DtTable.Select("TABLA='POSICION ORGANIZACIONAL'").Length > 0 Then
            'ENCONTRÓ CON DATOS DE MAPEO
            Dim Exec1 As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Carga_Unid_Org(Exec1, DirectCast(rp.DtTable.Select("TABLA='POSICION ORGANIZACIONAL'"), DataRow())(0).ItemArray(1))
            Exec1.Commit()

        End If
        If rp.DtTable.Select("TABLA='POSICION CARGO'").Length > 0 Then
            'ENCONTRÓ CON DATOS DE MAPEO
            Dim Exec1 As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Carga_Cargos(Exec1, DirectCast(rp.DtTable.Select("TABLA='POSICION CARGO'"), DataRow())(0).ItemArray(1), DirectCast(rp.DtTable.Select("TABLA='POSICION ORGANIZACIONAL'"), DataRow())(0).ItemArray(1))
            Exec1.Commit()
        End If


        '******  MAPEAR PERSONAS
        If rp.DtTable.Select("TABLA='PERSONAS RUT '").Length > 0 Then
            'ENCONTRÓ CON DATOS DE MAPEO
            'Recorrer todas las filas de personas vigentes.
            ' Dim Execp As New DotNetDal.SQLPersistence(False, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Dim rpp As New DotNetResponse.SQLPersistence
            ' rpp.StoredProcedure = "SP_GOP_GET_UP_PERSONAS_VIGENTES"
            'rpp.AddParametro(ViewState("sociedad"))
            'Execp.ExecuteDataTable(rpp)

            Dim rut As String = DirectCast(rp.DtTable.Select("TABLA='PERSONAS RUT '"), DataRow())(0).ItemArray(1)
            Dim materno As String
            Dim fono As String

            Dim email As String
            Dim nombre As String
            Dim paterno As String
            Dim rut_jefatura As String


            If DirectCast(rp.DtTable.Select("TABLA='PERSONAS MATERNO'"), DataRow()).Length = 0 Then
                materno = Nothing
            Else
                materno = DirectCast(rp.DtTable.Select("TABLA='PERSONAS MATERNO'"), DataRow())(0).ItemArray(1)
            End If

            If DirectCast(rp.DtTable.Select("TABLA='PERSONAS FONO'"), DataRow()).Length = 0 Then
                fono = Nothing
            Else
                fono = DirectCast(rp.DtTable.Select("TABLA='PERSONAS FONO'"), DataRow())(0).ItemArray(1)
            End If

            If DirectCast(rp.DtTable.Select("TABLA='PERSONAS EMAIL'"), DataRow()).Length = 0 Then
                email = Nothing
            Else
                email = DirectCast(rp.DtTable.Select("TABLA='PERSONAS EMAIL'"), DataRow())(0).ItemArray(1)
            End If

            If DirectCast(rp.DtTable.Select("TABLA='PERSONAS NOMBRES'"), DataRow()).Length = 0 Then
                nombre = Nothing
            Else
                nombre = DirectCast(rp.DtTable.Select("TABLA='PERSONAS NOMBRES'"), DataRow())(0).ItemArray(1)
            End If

            If DirectCast(rp.DtTable.Select("TABLA='PERSONAS PATERNO'"), DataRow()).Length = 0 Then
                paterno = Nothing
            Else
                paterno = DirectCast(rp.DtTable.Select("TABLA='PERSONAS PATERNO'"), DataRow())(0).ItemArray(1)
            End If

            If DirectCast(rp.DtTable.Select("TABLA='PERSONAS JEFATURA'"), DataRow()).Length = 0 Then
                rut_jefatura = Nothing
            Else
                rut_jefatura = DirectCast(rp.DtTable.Select("TABLA='PERSONAS JEFATURA'"), DataRow())(0).ItemArray(1)
            End If

            If rut Is Nothing Then rut = " null "
            If email Is Nothing Then email = " null "
            If nombre Is Nothing Then nombre = " null "
            If paterno Is Nothing Then paterno = " null "
            If materno Is Nothing Then materno = " null "
            If fono Is Nothing Then fono = " null "
            If rut_jefatura Is Nothing Then rut_jefatura = " null "

            Dim Exec1 As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Cargar_Personas(Exec1, rpp, rut, email, nombre, paterno, materno, fono, rut_jefatura)
            Exec1.Commit()
            ' Else
            'Registra_LOG(Exec2, 0, "Rut Colaborador", "A", "NO Mapeado", "")
        End If


        ' ****** CONTRATOS ******
        If True Then 'rp.DtTable.Select("TABLA='CONTRATOS CONTRATANTE'").Length > 0 or  Then
            
            Dim rut As String = DirectCast(rp.DtTable.Select("TABLA='PERSONAS RUT '"), DataRow())(0).ItemArray(1)

            Dim Rt As String

            Dim fecha As String = ""
            Dim tipo As String = ""

            If DirectCast(rp.DtTable.Select("TABLA='CONTRATOS CONTRATANTE'"), DataRow()).Length = 0 Then
                Rt = Nothing
            Else
                Rt = DirectCast(rp.DtTable.Select("TABLA='CONTRATOS CONTRATANTE'"), DataRow())(0).ItemArray(1)

            End If

            If DirectCast(rp.DtTable.Select("TABLA='CONTRATOS FECHA'"), DataRow()).Length > 0 Then
                fecha = DirectCast(rp.DtTable.Select("TABLA='CONTRATOS FECHA'"), DataRow())(0).ItemArray(1)
            Else
                fecha = Nothing
            End If


            If DirectCast(rp.DtTable.Select("TABLA='CONTRATOS TIPO'"), DataRow()).Length > 0 Then
                tipo = DirectCast(rp.DtTable.Select("TABLA='CONTRATOS TIPO'"), DataRow())(0).ItemArray(1)
            Else
                tipo = Nothing
            End If

            Dim Exec1 As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
            Contratos(Exec1, rut, Rt, fecha, tipo)
            Exec1.Commit()


        End If


        Posicion_Laboral(rp)


        Exec2.Commit()


        Session("archivo") = ViewState("archivo")
        Response.Redirect("Wfrm_Log_Carga.aspx")

    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Response.Redirect("WFRM_MAPEO.ASPX")
    End Sub
 
    Sub Carga_Cargos(ByRef Exec As DotNetDal.SQLPersistence, ByVal Nombre_Cargo As String, unid_org As String)
        DSProceso = OpenExcel("SELECT  " & Nombre_Cargo & ", " & unid_org & ",ROW FROM ")
        If Not DSProceso.Tables(0) Is Nothing Then
            Dim cols(1) As String
            cols(0) = Nombre_Cargo
            cols(1) = unid_org


            Dim Dv As New System.Data.DataView
            Dv = DSProceso.Tables(0).DefaultView
            Dim dt As New DataTable
            dt = Dv.ToTable '(True, cols)


            Dim i As Integer
            For i = 0 To dt.Rows.Count - 1
                Dim fila As Integer = dt.Rows(i).Item("ROW").ToString

                If dt.Rows(i).Item(Nombre_Cargo).ToString.Length < 3 Then
                    'error  
                    Registra_LOG(Exec, fila, Nombre_Cargo, "E", "largo mínimo 3 caracteres", dt.Rows(i).Item(Nombre_Cargo).ToString)
                Else

                    Dim cargo As String = QuitaEspacios(dt.Rows(i).Item(Nombre_Cargo).ToString)
                    Dim u_org As String = QuitaEspacios(dt.Rows(i).Item(unid_org).ToString)


                    Dim rp As New DotNetResponse.SQLPersistence
                    rp.StoredProcedure = "SP_SAVE_UP_CARGO"
                    rp.AddParametro(ViewState("sociedad"))
                    rp.AddParametro(Mid(u_org, 1, 50))
                    rp.AddParametro(Mid(cargo, 1, 30))
                    Exec.ExecuteNonQuery(rp)

                    If cargo.Length > 30 Then
                        Registra_LOG(Exec2, fila, Nombre_Cargo, "A", "El Cargo Supera los 30 caracteres", dt.Rows(i).Item(Nombre_Cargo).ToString)
                    End If

                    If rp.Errores Then
                        Registra_LOG(Exec2, fila, Nombre_Cargo, "E", rp.MensajeError, dt.Rows(i).Item(Nombre_Cargo).ToString)

                    End If
                End If

            Next
            '()
            '@RUT_SOCIEDAD
        End If


    End Sub

    Sub Carga_Unid_Neg(ByRef Exec As DotNetDal.SQLPersistence, ByVal Columna As String)

        DSProceso = OpenExcel("SELECT  " & Columna & ",ROW FROM ")
         
        If Not DSProceso.Tables(0) Is Nothing Then
            Dim Dv As New System.Data.DataView
            Dv = DSProceso.Tables(0).DefaultView
            Dim dt As New DataTable
            dt = Dv.ToTable '(True, Columna)



            Dim i As Integer
            For i = 0 To dt.Rows.Count - 1
                Dim fila As Integer = dt.Rows(i).Item("ROW").ToString

                If dt.Rows(i).Item(0).ToString.Length < 3 Then
                    'error rut no válido 
                    Registra_LOG(Exec2, fila, Columna, "E", "largo mínimo 3 caracteres", dt.Rows(i).Item(0).ToString)
                Else

                    Dim palabra As String = QuitaEspacios(dt.Rows(i).Item(0).ToString)

                    Dim rp As New DotNetResponse.SQLPersistence
                    rp.StoredProcedure = "SP_SAVE_UP_UNID_NEG"
                    rp.AddParametro(ViewState("sociedad"))
                    rp.AddParametro(Mid(palabra, 1, 50))
                    Exec.ExecuteNonQuery(rp)

                    If palabra.Length > 50 Then
                        Registra_LOG(Exec2, fila, Columna, "A", "La Unidad de Negocio Supera los 50 caracteres", dt.Rows(i).Item(Columna).ToString)
                    End If

                    If rp.Errores Then
                        Registra_LOG(Exec2, fila, Columna, "E", rp.MensajeError, dt.Rows(i).Item(Columna).ToString)

                    End If


                End If

            Next
            '()
            '@RUT_SOCIEDAD
        End If


    End Sub

    Sub Carga_Unid_Org(ByRef Exec As DotNetDal.SQLPersistence, ByVal Columna As String)


        DSProceso = OpenExcel("SELECT " & Columna & ",ROW FROM ")
        If Not DSProceso.Tables(0) Is Nothing Then
            Dim Dv As New System.Data.DataView
            Dv = DSProceso.Tables(0).DefaultView
            Dim dt As New DataTable
            dt = Dv.ToTable '(True, Columna)

            Dim i As Integer
            For i = 0 To dt.Rows.Count - 1
                Dim fila As Integer = dt.Rows(i).Item("ROW").ToString


                If dt.Rows(i).Item(0).ToString.Length < 3 Then
                    'error rut no válido 
                    Registra_LOG(Exec2, fila, Columna, "E", "largo mínimo 3 caracteres", dt.Rows(i).Item(0).ToString)
                Else

                    Dim palabra As String = QuitaEspacios(dt.Rows(i).Item(0).ToString)

                    Dim rp As New DotNetResponse.SQLPersistence
                    rp.StoredProcedure = "SP_SAVE_UP_UNID_ORG"
                    rp.AddParametro(ViewState("sociedad"))
                    rp.AddParametro(palabra)
                    Exec.ExecuteNonQuery(rp)



                    If palabra.Length > 50 Then
                        Registra_LOG(Exec2, fila, Columna, "A", "La Unidad de Negocio Supera los 50 caracteres", dt.Rows(i).Item(Columna).ToString)
                    End If

                    If rp.Errores Then
                        Registra_LOG(Exec2, fila, Columna, "E", rp.MensajeError, dt.Rows(i).Item(Columna).ToString)
                    End If

                End If

            Next
            '()
            '@RUT_SOCIEDAD
        End If


    End Sub

    Sub Carga_Sociedades(ByRef Exec As DotNetDal.SQLPersistence, ByVal Columna As String)
        Try

            DSProceso = OpenExcel("SELECT  [" & Columna & "] ,ROW FROM ")


            If Not DSProceso.Tables(0) Is Nothing Then
                Dim i As Integer
                For i = 0 To DSProceso.Tables(0).Rows.Count - 1
                    Dim fila As Integer = DSProceso.Tables(0).Rows(i).Item("ROW").ToString

                    If Not DotNetDal.Generica.ValidaRut(DSProceso.Tables(0).Rows(i).Item(0).ToString) Then
                        'error rut no válido 
                        'se solicita por email que si está en blanco no poner log de error.
                        If DSProceso.Tables(0).Rows(i).Item(0).ToString.Trim <> "" Then
                            Registra_LOG(Exec2, fila, Columna, "E", "Rut no válido SOC. CONTRATANTE", DSProceso.Tables(0).Rows(i).Item(Columna).ToString)
                        End If
                    Else
                        Dim rp As New DotNetResponse.SQLPersistence
                        rp.StoredProcedure = "SP_SAVE_UP_SOCIEDAD"
                        rp.AddParametro(DSProceso.Tables(0).Rows(i).Item(Columna).ToString)
                        Exec.ExecuteNonQuery(rp)



                        If DSProceso.Tables(0).Rows(i).Item(Columna).ToString.Length > 10 Then
                            Registra_LOG(Exec2, fila, Columna, "A", "La Sociedad Supera los 10 caracteres", DSProceso.Tables(0).Rows(i).Item(Columna).ToString)
                        End If

                        If rp.Errores Then
                            Registra_LOG(Exec2, fila, Columna, "E", rp.MensajeError, DSProceso.Tables(0).Rows(i).Item(Columna).ToString)

                        End If



                    End If

                Next
                '()
                '@RUT_SOCIEDAD
            End If


        Catch ex As Exception
            Registra_LOG(Exec2, 0, Columna, "E", ex.Message, Columna)

        End Try

    End Sub

    Sub Cargar_Personas(ByRef Exec As DotNetDal.SQLPersistence, ByRef rpp As DotNetResponse.SQLPersistence, ByVal rut As String, email As String, nombre As String, paterno As String, materno As String, fono As String, rut_jefatura As String)
        Try

        
        Dim i As Integer
        Dim adaptador1 As OleDb.OleDbDataAdapter
        Dim crut As String = ""
        Dim cemail As String = ""
        Dim cnombre As String = ""
        Dim cpaterno As String = ""
        Dim cmaterno As String = ""
        Dim cfono As String = ""
        Dim crut_jefe As String = ""

        If rut = " null " Then crut = "RUT" Else crut = rut
        If email = " null " Then cemail = "EMAIL" Else cemail = email
        If nombre = " null " Then cnombre = " NOMBRE" Else cnombre = nombre
        If paterno = " null " Then cpaterno = "PATERNO" Else cpaterno = paterno
        If materno = " null " Then cmaterno = "MATERNO" Else cmaterno = materno
        If fono = " null " Then cfono = "FONO" Else cfono = fono
        If rut_jefatura = " null " Then crut_jefe = "RUT_JEFATURA" Else crut_jefe = rut_jefatura

        Try
            DSProceso = OpenExcel("SELECT  " & rut & " as " & crut & "  ," & email & " as " & cemail & " ," & nombre & " as " & cnombre & " ," & paterno & " as " & cpaterno & " ," & materno & " as " & cmaterno & " ," & fono & " as " & cfono & " ," & rut_jefatura & " as " & crut_jefe & ",ROW  FROM  ")

        Catch ex As Exception
            Registra_LOG(Exec2, 0, "EXCEL", "E", ex.Message, "")
            Exit Sub
        End Try


        'revisar si existen rut repetidos en la data enviada
        ' se registran como errores
        If Not DSProceso.Tables(0) Is Nothing Then

                For i = 0 To DSProceso.Tables(0).Rows.Count - 1
                    Try
                        Dim fila As Integer = DSProceso.Tables(0).Rows(i).Item("ROW").ToString
                        Dim dr As DataRow()
                        'DSProceso.
                        dr = DSProceso.Tables(0).Select(rut & "='" & DSProceso.Tables(0).Rows(i).Item("" & crut & "").ToString.Trim & "'")

                        If dr.Length > 1 Then
                            Registra_LOG(Exec2, fila, rut, "E", "Rut Duplicado", DSProceso.Tables(0).Rows(i).Item("" & crut & "").ToString)

                            Dim k As Integer
                            For k = 0 To dr.Length - 1
                                DSProceso.Tables(0).Rows.Remove(dr(k))
                            Next
                        End If
                    Catch ex As Exception

                    End Try

                Next
        End If
        Dim irut As Integer
        Dim inombre As Integer
        Dim ipaterno As Integer
        Dim imaterno As Integer
        Dim ifono As Integer
        Dim iemail As Integer
        Dim ijefe As Integer


        Dim c As Integer
        For c = 0 To DSProceso.Tables(0).Columns.Count - 1
            If DSProceso.Tables(0).Columns(c).ColumnName = crut Then
                irut = c
            End If
            If DSProceso.Tables(0).Columns(c).ColumnName = cnombre Then
                inombre = c
            End If
            If DSProceso.Tables(0).Columns(c).ColumnName = cpaterno Then
                ipaterno = c
            End If
            If DSProceso.Tables(0).Columns(c).ColumnName = cmaterno Then
                imaterno = c
            End If
            If DSProceso.Tables(0).Columns(c).ColumnName = cfono Then
                ifono = c
            End If
            If DSProceso.Tables(0).Columns(c).ColumnName = cemail Then
                iemail = c
            End If
            If DSProceso.Tables(0).Columns(c).ColumnName = crut_jefe Then
                ijefe = c
            End If

        Next

        'If Not rpp.TieneDatos Then
        'No se encontraron datos en la base, se inserta todo
        Try
            If Not DSProceso.Tables(0) Is Nothing Then

                For i = 0 To DSProceso.Tables(0).Rows.Count - 1
                    Dim fila As Integer = DSProceso.Tables(0).Rows(i).Item("ROW").ToString

                    If Not DotNetDal.Generica.ValidaRut(DSProceso.Tables(0).Rows(i).Item(irut).ToString.Trim) Then
                        'error rut no válido 
                        Registra_LOG(Exec2, fila, rut, "E", "Rut no válido", DSProceso.Tables(0).Rows(i).Item(irut).ToString)
                    Else
                        'validar email
                        Dim vrut As String = DSProceso.Tables(0).Rows(i).Item(irut).ToString.Trim


                        Dim vemail As String = QuitaEspacios(DSProceso.Tables(0).Rows(i).Item(iemail).ToString.Trim)
                        Dim vnombre As String = QuitaEspacios(DSProceso.Tables(0).Rows(i).Item(inombre).ToString.Trim)
                        Dim vpaterno As String = QuitaEspacios(DSProceso.Tables(0).Rows(i).Item(ipaterno).ToString.Trim)
                        Dim vmaterno As String = QuitaEspacios(DSProceso.Tables(0).Rows(i).Item(imaterno).ToString.Trim)
                        Dim vfono As String = QuitaEspacios(DSProceso.Tables(0).Rows(i).Item(ifono).ToString)
                        Dim vRutJefe As String = DSProceso.Tables(0).Rows(i).Item(ijefe).ToString.Trim


                            If Not DotNetDal.Generica.ValidarMail(vemail) And vemail.Trim.Length > 0 Then
                                'Advertencia email, se registra nulo
                                Registra_LOG(Exec2, fila, email, "A", "Email no válido", vemail)
                            End If

                            If (vnombre.Length < 3 Or vnombre.Length > 20) And vnombre.Trim.Length > 0 Then
                                'Advertencia email, se registra nulo
                                Registra_LOG(Exec2, fila, nombre, "A", "Nombre menor a 3 caracteres o supera los 20 caracteres", vnombre)
                            End If


                            If (vpaterno.Length < 3 Or vpaterno.Length > 20) And vpaterno.Trim.Length > 0 Then
                                'Advertencia email, se registra nulo
                                Registra_LOG(Exec2, fila, paterno, "A", "A. Paterno menor a 3 caracteres o supera los 20 caracteres", vpaterno)
                            End If

                            If (vmaterno.Length < 3 Or vmaterno.Length > 20) And vmaterno.Trim.Length > 0 Then
                                'Advertencia email, se registra nulo
                                Registra_LOG(Exec, fila, materno, "A", "A. Materno menor a 3 caracteres o supera los 20 caracteres", vmaterno)
                            End If

                            If (vfono.Length < 7 Or vfono.Length > 15) And vfono.Trim.Length > 0 Then
                                'Advertencia email, se registra nulo
                                Registra_LOG(Exec2, fila, fono, "A", "Fono menor a 7 caracteres o supera los 15 caracteres", vfono)
                            End If

                        If Not DotNetDal.Generica.ValidaRut(vRutJefe) Then
                                Registra_LOG(Exec2, fila, rut_jefatura, "E", "Rut Jefe Incorrecto", vRutJefe)
                                vRutJefe = ViewState("jefatura")
                        End If

                        Dim vrutf As String = vrut.Replace(".", "").Replace("-", "")
                        Dim dv As String = Mid(vrutf, Len(vrutf), Len(vrutf))
                        vrut = Mid(vrutf, 1, Len(vrutf) - 1)

                        'crear usuario 

                        Dim rp As New DotNetResponse.SQLPersistence
                        rp.StoredProcedure = "SP_INSERT_UP_PERSONAS"
                        rp.AddParametro(vrut)
                        rp.AddParametro(dv)
                        rp.AddParametro(Mid(vnombre, 1, 20))
                        rp.AddParametro(Mid(vpaterno, 1, 20))
                        rp.AddParametro(Mid(vmaterno, 1, 20))
                        rp.AddParametro(Mid(vemail, 1, 150))
                        rp.AddParametro(Mid(vfono, 1, 15))
                        rp.AddParametro(Mid(vRutJefe, 1, 12))
                        rp.AddParametro(ViewState("id_carga"))


                        Exec.ExecuteNonQuery(rp)

                        If rp.Errores Then
                            Registra_LOG(Exec2, fila, "SP_INSERT_UP_PERSONAS", "E", rp.MensajeError, "")
                        End If

                    End If

                Next

            End If

        Catch ex As Exception
            Registra_LOG(Exec2, 0, "EXCEL", "E", ex.Message, "")

        End Try


       
        '********* Dar de baja todas las personas de la empresa que no tienen la marca de carga.
        'FALTA EL CODIGO
        Dim rpb As New DotNetResponse.SQLPersistence
        rpb.StoredProcedure = "SP_UP_BAJA_PERSONAS"
        rpb.AddParametro(ViewState("id_carga")) 'id_carga
        rpb.AddParametro(ViewState("sociedad")) 'sociedad
        Exec.ExecuteNonQuery(rpb)
        If rpb.Errores Then
            Registra_LOG(Exec2, 0, "BAJA PERSONAS", "E", rpb.MensajeError, "")
        End If


        Catch ex As Exception
            Registra_LOG(Exec2, 0, "Carga de Personas", "E", ex.Message, "")

        End Try

    End Sub

    Sub Contratos(ByRef exec As DotNetDal.SQLPersistence, Rut_persona As String, rut As String, fecha As String, tipo As String)
        Try


            Dim i As Integer

            Dim crut As String = ""
            Dim cfecha As String = ""
            Dim ctipo As String = ""

            If rut Is Nothing Then
                crut = "RUT"
                rut = " null "
            Else
                crut = rut
            End If

            If fecha Is Nothing Then
                cfecha = "FECHA"
                fecha = " null "
            Else
                cfecha = fecha
            End If

            If tipo Is Nothing Then
                ctipo = "TIPO"
                tipo = " null "
            Else
                ctipo = tipo
            End If


            Try

                DSProceso = OpenExcel("SELECT  [" & Rut_persona & "] ,[" & rut & "] as [" & crut & "]  ,[" & tipo & "] as [" & ctipo & "] ,[" & fecha & "] as [" & cfecha & "] ,ROW  FROM ")

            Catch ex As Exception
                Registra_LOG(Exec2, 0, "EXCEL", "E", ex.Message, "")
                Exit Sub
            End Try


            ' se registran como errores
            If Not DSProceso.Tables(0) Is Nothing Then

                For i = 0 To DSProceso.Tables(0).Rows.Count - 1

                    Dim fila As Integer = DSProceso.Tables(0).Rows(i).Item("ROW").ToString()

                    If DotNetDal.Generica.ValidaRut(DSProceso.Tables(0).Rows(i).Item("" & Rut_persona & "").ToString()) Then

                        Dim vrutp As String = DSProceso.Tables(0).Rows(i).Item("" & Rut_persona & "").ToString()
                        Dim vrut As String = DSProceso.Tables(0).Rows(i).Item("" & crut & "").ToString()
                        Dim vtipo As String = DSProceso.Tables(0).Rows(i).Item("" & ctipo & "").ToString()
                        Dim vfecha As String = DSProceso.Tables(0).Rows(i).Item("" & cfecha & "").ToString()
                        Dim vrutf As String '= vrut.Replace(".", "").Replace("-", "")



                    

                        vrutf = vrutp.Replace(".", "").Replace("-", "")
                        vrutp = Mid(vrutf, 1, Len(vrutf) - 1)

                      


                        If DotNetDal.Generica.ValidaRut(vrut) = False And vrut.Trim <> "" Then
                            'si rut de la sociedad contratante es inválido, no crear contrato ( viene rut malo )
                            'log de contrato no creado
                            Registra_LOG(Exec2, fila, "CREAR CONTRATO", "E", "CONTRATO NO CREADO POR RUT INVÁLIDO", vrut)
                        Else
                            If vrut.Trim = "" Then
                                vrut = ViewState("rol_sociedad")
                            End If

                            ' vrutf = vrut.Replace(".", "").Replace("-", "")
                            'vrut = Mid(vrutf, 1, Len(vrutf) - 1)


                            If IsDate(vfecha) = False Then
                                vfecha = "01/01/1900"
                            End If
                            If Val(vtipo) = 0 Then
                                vtipo = "1"
                            End If

                            'si fecha es nulo, crear un contrato y dejar todos los otros no vigentes.
                            If vfecha = "01/01/1900" Then
                                Dim Rpi As New DotNetResponse.SQLPersistence
                                Rpi.StoredProcedure = "SP_INSERT_UP_CONTRATO"
                                Rpi.AddParametro(vrutp)
                                Rpi.AddParametro(ViewState("sociedad"))
                                Rpi.AddParametro(vrut)
                                Rpi.AddParametro(vtipo)
                                Rpi.AddParametro(vfecha)
                                exec.ExecuteNonQuery(Rpi)

                                If Rpi.Errores Then
                                    Registra_LOG(Exec2, fila, "CREAR CONTRATO", "E", Rpi.MensajeError, vrutf)
                                End If
                            Else

                                Dim rp As New DotNetResponse.SQLPersistence
                                rp.StoredProcedure = "SP_GET_UP_CONTRATO"
                                rp.AddParametro(vrutp)
                                rp.AddParametro(ViewState("sociedad"))
                                exec.ExecuteDataTable(rp)
                                If rp.TieneDatos Then
                                    Dim Vbtipo As String = rp.DtTable.Rows(0).Item(2).ToString()
                                    Dim Vbfecha As String = rp.DtTable.Rows(0).Item(1).ToString()
                                    Dim Vbrut As String = rp.DtTable.Rows(0).Item(0).ToString()

                                    'If DotNetDal.Generica.ValidaRut(vrut) = False Then
                                    '    vrut = ViewState("rol_sociedad")
                                    'End If

                                    If Vbrut <> vrut Or Vbtipo <> vtipo Then 'el rut de la empresa mapeado es distinto del registrado, se crea un nuevo contrato y se anula el que esta vigente
                                        Dim Rpi As New DotNetResponse.SQLPersistence
                                        Rpi.StoredProcedure = "SP_INSERT_UP_CONTRATO"
                                        Rpi.AddParametro(vrutp)
                                        Rpi.AddParametro(ViewState("sociedad"))
                                        Rpi.AddParametro(vrut)
                                        Rpi.AddParametro(vtipo)
                                        Rpi.AddParametro(vfecha)
                                        exec.ExecuteNonQuery(Rpi)
                                        If Rpi.Errores Then
                                            Registra_LOG(Exec2, fila, "CREAR CONTRATO", "E", Rpi.MensajeError, vrutf)
                                        End If
                                    Else
                                        If IsDate(vfecha) And Vbfecha <> vfecha Then 'las fechas de contrato son distintas

                                            Dim Rpi As New DotNetResponse.SQLPersistence
                                            Rpi.StoredProcedure = "SP_INSERT_UP_CONTRATO"
                                            Rpi.AddParametro(vrutp)
                                            Rpi.AddParametro(ViewState("sociedad"))
                                            Rpi.AddParametro(vrut)
                                            Rpi.AddParametro(vtipo)
                                            Rpi.AddParametro(vfecha)
                                            exec.ExecuteNonQuery(Rpi)

                                            Registra_LOG(Exec2, fila, cfecha, "A", "Actualiza Contrato Vigente ", Vbfecha)

                                            If Rpi.Errores Then
                                                Registra_LOG(Exec2, fila, "CREAR CONTRATO", "E", Rpi.MensajeError, vrutf)
                                            End If


                                        End If
                                    End If
                                End If

                            End If
                        End If
                    End If

                Next
            End If
        Catch ex As Exception
            Registra_LOG(Exec2, 0, "Carga de Contratos", "E", ex.Message, "")
        End Try

    End Sub

    Sub Posicion_Laboral(ByRef rp As DotNetResponse.SQLPersistence)
        Try

        
        Dim continua As Boolean = True


        Dim SOCIEDAD As String
        Dim CARGO As String
        Dim ccargo As String
        Dim ORGANIZACIONAL As String
        Dim corganizacional As String
        Dim NEGOCIO As String
        Dim cnegocio As String
        Dim REGION As String
        Dim cregio As String
        Dim COMUNA As String
        Dim FRANQUICIA As String
        Dim ESCOLARIDAD As String
        Dim OCUPACIONAL As String
        Dim Jefe As String

        If DirectCast(rp.DtTable.Select("TABLA='PERSONAS JEFATURA'"), DataRow()).Length = 0 Then
            Jefe = " null as jefe "
        Else
            Jefe = DirectCast(rp.DtTable.Select("TABLA='PERSONAS JEFATURA'"), DataRow())(0).ItemArray(1).ToString() & " as jefe "
        End If


        If DirectCast(rp.DtTable.Select("TABLA='PERSONAS RUT '"), DataRow()).Length = 0 Then
            continua = False
            'Registra_LOG(Exec2, 0, "POSICION LABORAL", "E", "PERSONA NO MAPEADO", "")
        End If
        Dim rut As String = DirectCast(rp.DtTable.Select("TABLA='PERSONAS RUT '"), DataRow())(0).ItemArray(1).ToString() & " as rut "

        If DirectCast(rp.DtTable.Select("TABLA='POSICION SOCIEDAD'"), DataRow()).Length = 0 Then
            SOCIEDAD = " null  as sociedad "
        Else
            SOCIEDAD = DirectCast(rp.DtTable.Select("TABLA='POSICION SOCIEDAD'"), DataRow())(0).ItemArray(1).ToString() & "   as sociedad "
        End If

        If DirectCast(rp.DtTable.Select("TABLA='POSICION CARGO'"), DataRow()).Length = 0 Then
            CARGO = " null  as cargo "
        Else
            CARGO = DirectCast(rp.DtTable.Select("TABLA='POSICION CARGO'"), DataRow())(0).ItemArray(1).ToString() & "  as cargo "
        End If

        If DirectCast(rp.DtTable.Select("TABLA='POSICION ORGANIZACIONAL'"), DataRow()).Length = 0 Then
            ORGANIZACIONAL = " null as organizacional "
        Else
            ORGANIZACIONAL = DirectCast(rp.DtTable.Select("TABLA='POSICION ORGANIZACIONAL'"), DataRow())(0).ItemArray(1).ToString() & " as organizacional "
        End If
        If DirectCast(rp.DtTable.Select("TABLA='POSICION NEGOCIO'"), DataRow()).Length = 0 Then
            NEGOCIO = " null as negocio"
        Else
            NEGOCIO = DirectCast(rp.DtTable.Select("TABLA='POSICION NEGOCIO'"), DataRow())(0).ItemArray(1).ToString() & "  as negocio"
        End If
        If DirectCast(rp.DtTable.Select("TABLA='POSICION REGION'"), DataRow()).Length = 0 Then
            REGION = " null as region "
        Else
            REGION = DirectCast(rp.DtTable.Select("TABLA='POSICION REGION'"), DataRow())(0).ItemArray(1).ToString() & "  as region "
        End If
        If DirectCast(rp.DtTable.Select("TABLA='POSICION COMUNA'"), DataRow()).Length = 0 Then
            COMUNA = " null  as comuna "
        Else
            COMUNA = DirectCast(rp.DtTable.Select("TABLA='POSICION COMUNA'"), DataRow())(0).ItemArray(1).ToString() & "  as comuna "
        End If

        If DirectCast(rp.DtTable.Select("TABLA='POSICION FRANQUICIA'"), DataRow()).Length = 0 Then
            FRANQUICIA = " null as franquicia "
        Else
            FRANQUICIA = DirectCast(rp.DtTable.Select("TABLA='POSICION FRANQUICIA'"), DataRow())(0).ItemArray(1).ToString() & "  as franquicia "
        End If
        If DirectCast(rp.DtTable.Select("TABLA='POSICION ESCOLARIDAD'"), DataRow()).Length = 0 Then
            ESCOLARIDAD = " null as escolaridad "
        Else
            ESCOLARIDAD = DirectCast(rp.DtTable.Select("TABLA='POSICION ESCOLARIDAD'"), DataRow())(0).ItemArray(1).ToString() & "  as escolaridad "
        End If
        If DirectCast(rp.DtTable.Select("TABLA='POSICION OCUPACIONAL'"), DataRow()).Length = 0 Then
            OCUPACIONAL = " null  as  ocupacional "
        Else
            OCUPACIONAL = DirectCast(rp.DtTable.Select("TABLA='POSICION OCUPACIONAL'"), DataRow())(0).ItemArray(1).ToString() & "  as  ocupacional "
        End If

        Dim i As Integer

        Try
            DSProceso = OpenExcel("SELECT  " & rut & " ," & SOCIEDAD & "," & CARGO & " ," & ORGANIZACIONAL & " ," & NEGOCIO & "," & REGION & "," & COMUNA & "," & FRANQUICIA & "," & ESCOLARIDAD & "," & OCUPACIONAL & "," & Jefe & ",ROW  FROM ")

        Catch ex As Exception
            Registra_LOG(Exec2, 0, "EXCEL", "E", ex.Message, "")
            Exit Sub
        End Try


        If Not DSProceso.Tables(0) Is Nothing Then

            Dim exec As New DotNetDal.SQLPersistence(True, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)


            For i = 0 To DSProceso.Tables(0).Rows.Count - 1
                    Dim fila As Integer = DSProceso.Tables(0).Rows(i).Item("ROW").ToString()

                    Dim Id_Persona As String = DSProceso.Tables(0).Rows(i).Item("rut").ToString().Trim
                    Dim IdSociedadTrabaja As String = DSProceso.Tables(0).Rows(i).Item("sociedad").ToString().Trim
                    Dim id_cargo As String = DSProceso.Tables(0).Rows(i).Item("cargo").ToString().Trim
                    Dim Id_UOrg_Trabaja As String = DSProceso.Tables(0).Rows(i).Item("organizacional").ToString().Trim
                    Dim Id_UNeg_Trabaja As String = DSProceso.Tables(0).Rows(i).Item("negocio").ToString().Trim
                'Dim Id_PersonaJefe As String = DSProceso.Tables(0).Rows(i).Item("" & rut & "")
                    Dim Franquicia_SENCE As String = DSProceso.Tables(0).Rows(i).Item("franquicia").ToString().Trim
                    Dim ID_Escolaridad_SENCE As String = DSProceso.Tables(0).Rows(i).Item("escolaridad").ToString().Trim
                    Dim ID_Nivel_Ocupacional_Sence As String = DSProceso.Tables(0).Rows(i).Item("ocupacional").ToString().Trim
                    Dim ID_Region_Laboral As String = DSProceso.Tables(0).Rows(i).Item("region").ToString().Trim
                    Dim ID_Comuna_Laboral As String = DSProceso.Tables(0).Rows(i).Item("comuna").ToString().Trim
                    Dim Jefatura As String = DSProceso.Tables(0).Rows(i).Item("jefe").ToString().Trim


                If DotNetDal.Generica.ValidaRut(Id_Persona) Then


                    Dim vrutf As String = Id_Persona.Replace(".", "").Replace("-", "")
                    'dv = Mid(vrutf, Len(vrutf), Len(vrutf))
                    Id_Persona = Mid(vrutf, 1, Len(vrutf) - 1)

                    vrutf = Jefatura.Replace(".", "").Replace("-", "")
                    Jefatura = Mid(vrutf, 1, Len(vrutf) - 1)

                    If IdSociedadTrabaja = "" Then
                        IdSociedadTrabaja = ViewState("rol_sociedad")
                    End If
                    If Id_UOrg_Trabaja = "" Then
                        Id_UOrg_Trabaja = ViewState("id_org")
                    End If
                    If Id_UNeg_Trabaja = "" Then
                        Id_UNeg_Trabaja = ViewState("id_neg")
                    End If
                    If Jefatura = "" Then
                        Jefatura = ViewState("jefatura")
                    End If
                    If Franquicia_SENCE = "" Then
                        Franquicia_SENCE = 0
                    End If
                    If ID_Escolaridad_SENCE = "" Then
                        ID_Escolaridad_SENCE = ViewState("escolaridad")
                    End If
                    If ID_Nivel_Ocupacional_Sence = "" Then
                        ID_Nivel_Ocupacional_Sence = ViewState("nivel_ocupacional")
                    End If
                    If ID_Region_Laboral = "" Then
                        ID_Region_Laboral = ViewState("region")
                    End If
                    If ID_Comuna_Laboral = "" Then
                        ID_Comuna_Laboral = ViewState("comuna")
                    End If
                    If id_cargo = "" Then
                        id_cargo = ViewState("id_cargo")
                    End If

                    Dim RpS As New DotNetResponse.SQLPersistence
                    RpS.StoredProcedure = "SP_GET_UP_POSICION_LABORAL"
                    RpS.AddParametro(Id_Persona)
                    RpS.AddParametro(IdSociedadTrabaja)
                    RpS.AddParametro(Mid(QuitaEspacios(Id_UOrg_Trabaja), 1, 50))
                    RpS.AddParametro(Mid(QuitaEspacios(Id_UNeg_Trabaja), 1, 50))
                        RpS.AddParametro(Val(Franquicia_SENCE))
                    RpS.AddParametro(Mid(QuitaEspacios(ID_Escolaridad_SENCE), 1, 250))
                    RpS.AddParametro(Mid(QuitaEspacios(ID_Nivel_Ocupacional_Sence), 1, 50))
                    RpS.AddParametro(QuitaEspacios(ID_Region_Laboral))
                    RpS.AddParametro(QuitaEspacios(ID_Comuna_Laboral))
                    RpS.AddParametro(ViewState("sociedad"))
                    RpS.AddParametro(Mid(QuitaEspacios(id_cargo), 1, 30))
                    RpS.AddParametro(QuitaEspacios(Jefatura))
                    exec.ExecuteDataTable(RpS)

                    If RpS.Errores Then
                        Registra_LOG(Exec2, fila, "CREAR POSICION", "E", RpS.MensajeError, "")
                    End If



                    Dim PIdSociedad As String = IdSociedadTrabaja
                    Dim PId_Uorg As String = Mid(Id_UOrg_Trabaja, 1, 50)
                    Dim PId_Uneg As String = Mid(Id_UNeg_Trabaja, 1, 50)
                    Dim PId_PersonaJefe As String = Jefatura
                        Dim PFranquicia_SENCE As String = Franquicia_SENCE
                        Dim PID_Escolaridad_SENCE As String = ID_Escolaridad_SENCE 'RpS.DtTable.Rows(0).Item("N_Escolaridad_sence").ToString()
                    Dim PID_Nivel_Ocupacional_Sence As String = Mid(ID_Nivel_Ocupacional_Sence, 1, 50)
                    Dim PID_Region_Laboral As String = Mid(ID_Region_Laboral, 1, 50)
                    Dim PID_Comuna_Laboral As String = Mid(ID_Comuna_Laboral, 1, 50)
                    Dim PId_Cargo As String = Mid(id_cargo, 1, 30)

                        If IdSociedadTrabaja = "" Then
                            PIdSociedad = ViewState("rol_sociedad")
                        End If
                        If Id_UOrg_Trabaja = "" Then
                            PId_Uorg = ViewState("id_org")
                        End If
                        If Id_UNeg_Trabaja = "" Then
                            PId_Uneg = ViewState("id_neg")
                        End If
                        If Jefatura = "" Then
                            PId_PersonaJefe = ViewState("jefatura")
                        End If
                        If Franquicia_SENCE = "" Then
                            PFranquicia_SENCE = 0
                        End If
                        If ID_Escolaridad_SENCE = "" Then
                            PID_Escolaridad_SENCE = ViewState("escolaridad")
                        End If
                        If ID_Nivel_Ocupacional_Sence = "" Then
                            PID_Nivel_Ocupacional_Sence = ViewState("nivel_ocupacional")
                        End If
                        If ID_Region_Laboral = "" Then
                            PID_Region_Laboral = ViewState("region")
                        End If
                        If ID_Comuna_Laboral = "" Then
                            PID_Comuna_Laboral = ViewState("comuna")
                        End If
                        If id_cargo = "" Then
                            PId_Cargo = ViewState("id_cargo")
                        End If

                        If RpS.TieneDatos Then
                            Dim nuevo As Boolean = False

                            If RpS.DtTable.Rows(0).Item("N_SOCIEDAD_ID_SOCIEDAD").ToString() <> RpS.DtTable.Rows(0).Item("IdSociedad").ToString() Then
                                nuevo = True
                            End If
                            '
                            If Val(RpS.DtTable.Rows(0).Item("Franquicia_SENCE").ToString()) <> Val(PFranquicia_SENCE) Then
                                nuevo = True
                            End If

                            If RpS.DtTable.Rows(0).Item("N_UNEGOCIO_Unid_neg").ToString() <> RpS.DtTable.Rows(0).Item("Id_Uneg").ToString() Then
                                nuevo = True
                            End If
                            If RpS.DtTable.Rows(0).Item("N_UORG_Unid_Org").ToString() <> RpS.DtTable.Rows(0).Item("Id_Uorg").ToString() Then
                                nuevo = True
                            End If
                            If RpS.DtTable.Rows(0).Item("N_Escolaridad_sence").ToString() <> RpS.DtTable.Rows(0).Item("ID_Escolaridad_SENCE").ToString() Then
                                nuevo = True
                            End If
                            If RpS.DtTable.Rows(0).Item("N_Nivel_ocupacional").ToString() <> RpS.DtTable.Rows(0).Item("ID_Nivel_Ocupacional_Sence").ToString() Then
                                nuevo = True
                            End If
                            If RpS.DtTable.Rows(0).Item("N_region").ToString() <> RpS.DtTable.Rows(0).Item("ID_Region_Laboral").ToString() Then
                                nuevo = True
                            End If
                            If RpS.DtTable.Rows(0).Item("ID_Comuna_Laboral").ToString() <> RpS.DtTable.Rows(0).Item("N_comuna").ToString() Then
                                nuevo = True
                            End If
                            If RpS.DtTable.Rows(0).Item("jefe").ToString() <> RpS.DtTable.Rows(0).Item("Id_PersonaJefe").ToString() Then
                                nuevo = True
                            End If

                            If RpS.DtTable.Rows(0).Item("id_cargo").ToString() <> RpS.DtTable.Rows(0).Item("n_cargo").ToString() Then
                                nuevo = True
                            End If

                            If nuevo = True Then
                                'Repito lo de abajo ....

                                'BUSCAR LOS IDS.
                                Dim execX As New DotNetDal.SQLPersistence(False, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
                                Dim RPGET As New DotNetResponse.SQLPersistence
                                RPGET.AddParametro(PIdSociedad)
                                RPGET.AddParametro(Mid(QuitaEspacios(PId_Uorg), 1, 50))
                                RPGET.AddParametro(Mid(QuitaEspacios(PId_Uneg), 1, 50))
                                RPGET.AddParametro(Val(PFranquicia_SENCE))
                                RPGET.AddParametro(QuitaEspacios(PID_Escolaridad_SENCE))
                                RPGET.AddParametro(Mid(QuitaEspacios(PID_Nivel_Ocupacional_Sence), 1, 50))
                                RPGET.AddParametro(Mid(QuitaEspacios(PID_Region_Laboral), 1, 50))
                                RPGET.AddParametro(Mid(QuitaEspacios(PID_Comuna_Laboral), 1, 50))
                                RPGET.AddParametro(QuitaEspacios(ViewState("sociedad")))
                                RPGET.AddParametro(Mid(QuitaEspacios(PId_Cargo), 1, 30))
                                RPGET.AddParametro(QuitaEspacios(PId_PersonaJefe))
                                RPGET.StoredProcedure = "SP_GET_UP_IDS_LABORAL"
                                execX.ExecuteDataTable(RPGET)

                                If RPGET.Errores Then
                                    Dim erro As String = ""
                                End If


                                'Id_Persona = RPGET.DtTable.Rows(0).Item("Id_Persona")
                                PIdSociedad = RPGET.DtTable.Rows(0).Item("N_SOCIEDAD_ID_SOCIEDAD").ToString()
                                PId_Uorg = RPGET.DtTable.Rows(0).Item("N_UORG_Unid_Org").ToString()
                                PId_Uneg = RPGET.DtTable.Rows(0).Item("N_UNEGOCIO_Unid_neg").ToString()
                                PId_PersonaJefe = RPGET.DtTable.Rows(0).Item("jefe").ToString()
                                'PFranquicia_SENCE = 0
                                PID_Escolaridad_SENCE = RPGET.DtTable.Rows(0).Item("N_Escolaridad_sence").ToString()
                                PID_Nivel_Ocupacional_Sence = RPGET.DtTable.Rows(0).Item("N_Nivel_ocupacional").ToString()
                                PID_Region_Laboral = RPGET.DtTable.Rows(0).Item("N_region").ToString()
                                PID_Comuna_Laboral = RPGET.DtTable.Rows(0).Item("N_comuna").ToString()
                                PId_Cargo = RPGET.DtTable.Rows(0).Item("N_cargo").ToString()

                                If Not IsNumeric(PID_Escolaridad_SENCE) Then
                                    PID_Escolaridad_SENCE = ViewState("escolaridad")
                                End If

                                If Not IsNumeric(PID_Nivel_Ocupacional_Sence) Then
                                    PID_Nivel_Ocupacional_Sence = ViewState("nivel_ocupacional")
                                End If

                                If Val(PId_Uneg) = 0 Then
                                    PId_Uneg = ViewState("id_neg")
                                End If

                                If Val(PId_Uorg) = 0 Then
                                    PId_Uneg = ViewState("id_org")
                                End If


                                'anular las posiciones 
                                Dim RPAn As New DotNetResponse.SQLPersistence
                                RPAn.StoredProcedure = "SP_ANU_POSICION_LABORAL"
                                RPAn.AddParametro(Id_Persona)
                                RPAn.AddParametro(PIdSociedad)
                                exec.ExecuteNonQuery(RPAn)


                                'Crear la posicion para la persona
                                Dim RPIN As New DotNetResponse.SQLPersistence
                                RPIN.StoredProcedure = "SP_INS_POSICION_LABORAL"
                                RPIN.AddParametro(Id_Persona)
                                RPIN.AddParametro(PIdSociedad)
                                RPIN.AddParametro(PId_Uorg)
                                RPIN.AddParametro(PId_Uneg)
                                RPIN.AddParametro(PId_PersonaJefe)
                                RPIN.AddParametro(Val(PFranquicia_SENCE))
                                RPIN.AddParametro(PID_Escolaridad_SENCE)
                                RPIN.AddParametro(PID_Nivel_Ocupacional_Sence)
                                RPIN.AddParametro(PID_Region_Laboral)
                                RPIN.AddParametro(PID_Comuna_Laboral)
                                RPIN.AddParametro(PId_Cargo)

                                exec.ExecuteNonQuery(RPIN)

                                If RPIN.Errores Then
                                    Registra_LOG(Exec2, fila, "POSICION", "E", RPIN.MensajeError, "")
                                End If



                            End If

                        Else
                            'repito de lo de mas arriba
                            'BUSCAR LOS IDS.
                            Dim execX As New DotNetDal.SQLPersistence(False, "cnn", DotNetDal.SQLPersistence.Provider.SQLCLIENT)
                            Dim RPGET As New DotNetResponse.SQLPersistence
                            RPGET.AddParametro(PIdSociedad)
                            RPGET.AddParametro(Mid(QuitaEspacios(PId_Uorg), 1, 50))
                            RPGET.AddParametro(Mid(QuitaEspacios(PId_Uneg), 1, 50))
                            RPGET.AddParametro(Val(PFranquicia_SENCE))
                            RPGET.AddParametro(QuitaEspacios(PID_Escolaridad_SENCE))
                            RPGET.AddParametro(Mid(QuitaEspacios(PID_Nivel_Ocupacional_Sence), 1, 50))
                            RPGET.AddParametro(Mid(QuitaEspacios(PID_Region_Laboral), 1, 50))
                            RPGET.AddParametro(Mid(QuitaEspacios(PID_Comuna_Laboral), 1, 50))
                            RPGET.AddParametro(QuitaEspacios(ViewState("sociedad")))
                            RPGET.AddParametro(Mid(QuitaEspacios(PId_Cargo), 1, 30))
                            RPGET.AddParametro(QuitaEspacios(PId_PersonaJefe))
                            RPGET.StoredProcedure = "SP_GET_UP_IDS_LABORAL"
                            execX.ExecuteDataTable(RPGET)

                            If RPGET.Errores Then
                                Dim erro As String = ""
                            End If




                            'Id_Persona = RPGET.DtTable.Rows(0).Item("Id_Persona")
                            PIdSociedad = RPGET.DtTable.Rows(0).Item("N_SOCIEDAD_ID_SOCIEDAD").ToString()
                            PId_Uorg = RPGET.DtTable.Rows(0).Item("N_UORG_Unid_Org").ToString()
                            PId_Uneg = RPGET.DtTable.Rows(0).Item("N_UNEGOCIO_Unid_neg").ToString()
                            PId_PersonaJefe = RPGET.DtTable.Rows(0).Item("jefe").ToString()
                            'PFranquicia_SENCE = 0
                            PID_Escolaridad_SENCE = RPGET.DtTable.Rows(0).Item("N_Escolaridad_sence").ToString()
                            PID_Nivel_Ocupacional_Sence = RPGET.DtTable.Rows(0).Item("N_Nivel_ocupacional").ToString()
                            PID_Region_Laboral = RPGET.DtTable.Rows(0).Item("N_region").ToString()
                            PID_Comuna_Laboral = RPGET.DtTable.Rows(0).Item("N_comuna").ToString()
                            PId_Cargo = RPGET.DtTable.Rows(0).Item("N_cargo").ToString()


                            If Not IsNumeric(PID_Escolaridad_SENCE) Then
                                PID_Escolaridad_SENCE = ViewState("escolaridad")
                            End If

                            If Not IsNumeric(PID_Nivel_Ocupacional_Sence) Then
                                PID_Nivel_Ocupacional_Sence = ViewState("nivel_ocupacional")
                            End If


                            If Val(PId_Uneg) = 0 Then
                                PId_Uneg = ViewState("id_neg")
                            End If

                            If Val(PId_Uorg) = 0 Then
                                PId_Uneg = ViewState("id_org")
                            End If

                            'Crear la posicion para la persona
                            Dim RPIN As New DotNetResponse.SQLPersistence
                            RPIN.StoredProcedure = "SP_INS_POSICION_LABORAL"
                            RPIN.AddParametro(Id_Persona.Trim)
                            RPIN.AddParametro(PIdSociedad)
                            RPIN.AddParametro(PId_Uorg)
                            RPIN.AddParametro(PId_Uneg)
                            RPIN.AddParametro(PId_PersonaJefe)
                            RPIN.AddParametro(Val(PFranquicia_SENCE))
                            RPIN.AddParametro(PID_Escolaridad_SENCE)
                            RPIN.AddParametro(PID_Nivel_Ocupacional_Sence)
                            RPIN.AddParametro(PID_Region_Laboral)
                            RPIN.AddParametro(PID_Comuna_Laboral)
                            RPIN.AddParametro(PId_Cargo)

                            exec.ExecuteNonQuery(RPIN)

                            If RPIN.Errores Then
                                Registra_LOG(Exec2, fila, "POSICION", "E", RPIN.MensajeError, "")
                            End If



                        End If

                    End If
                Next
            exec.Commit()


        End If


         Catch ex As Exception
            Registra_LOG(Exec2, 0, "Carga de Posicion Laboral", "E", ex.Message, "")
        End Try



    End Sub

    Sub Registra_LOG(ByRef Exec2 As DotNetDal.SQLPersistence, ByVal fila As Integer, ByVal columna As String, ByVal tipo_alerta As String, ByVal mensaje As String, valor As String)
    Dim rp As New DotNetResponse.SQLPersistence
        rp.StoredProcedure = "SP_UP_SAVE_LOG"
        rp.AddParametro(ViewState("archivo"))
        rp.AddParametro(ViewState("sociedad"))
        rp.AddParametro(columna)
        rp.AddParametro(tipo_alerta)
        rp.AddParametro(fila)
        rp.AddParametro(mensaje)
        rp.AddParametro(valor)
        Exec2.ExecuteNonQuery(rp)       
    End Sub
    Function QuitaEspacios(Palabra As String)
        Palabra = Palabra.ToString.Trim
        Palabra = Palabra.Replace("     ", " ")
        Palabra = Palabra.Replace("    ", " ")
        Palabra = Palabra.Replace("   ", " ")
        Palabra = Palabra.Replace("  ", " ")
        Return Palabra
    End Function

    Function OpenExcel(ByVal Query As String) As DataSet
        Try
            Dim cadenaCon As String

            If System.IO.Path.GetExtension(ViewState("archivo")).ToUpper() = ".XLS" Then
                cadenaCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ViewState("archivo") & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=0"";"
            Else
                cadenaCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ViewState("archivo") & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=0"";"
            End If

            Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection(cadenaCon)
            con.Open()

            Dim dbSchema As New System.Data.DataTable()
            dbSchema = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, Nothing)
            Dim shet As String = dbSchema.Rows(0)("TABLE_NAME")
            DSProceso = New DataSet

            Dim adaptador1 As OleDb.OleDbDataAdapter
            adaptador1 = New OleDb.OleDbDataAdapter(Query & "[" & "PERSONAL$" & "] order by row", con)
            adaptador1.Fill(DSProceso, "XLData")
            con.Close()

            Return DSProceso
        Catch ex As Exception
            Registra_LOG(Exec2, 0, "EXCEL", "E", ex.Message, Query)
            Session("archivo") = ViewState("archivo")
            Response.Redirect("Wfrm_Log_Carga.aspx")
            Return Nothing
        End Try

    End Function


End Class